接下面,就要建立最後的元件,來顯示出員工銷售排行榜。這也是子元件。之前有提到元件可大可小,大時就是一個網頁,小時就可以是一個子元件,專門來執行特定的功能,再組合起來,成為一個網頁。
先依之前的步驟,建立第三個元件,名稱為「employee-sales-list」,來顯示員工銷售排行榜。
在employee-sales-list.component.ts中,首先,將import資料類別及服務。直接用原來的getEmployees(),修改成先進行排序,再取銷售金額前二名的員工資料。程式碼如下:
import { Component, OnInit } from '@angular/core';
// 引用資料類
import { Employeeinfo } from './../employeeinfo';
// 載入Service
import { EmployeeserviceService } from './../employeeservice.service';
@Component({
selector: 'app-employee-sales-list',
templateUrl: './employee-sales-list.component.html',
styleUrls: ['./employee-sales-list.component.css']
})
export class EmployeeSalesListComponent implements OnInit {
employeelists: Employeeinfo[] = [];
// 建構子
constructor(private employeeService: EmployeeserviceService) {}
// 初始化
ngOnInit() {
this.getEmployees();
}
getEmployees(): void {
// 先排序,再取前二名員工資料
// tslint:disable-next-line: only-arrow-functions
this.employeelists = this.employeeService.getEmployee().sort(function(a, b) {
return b.sales - a.sales;
}).splice(0, 2);
}
}
在employee-sales-list.component.html中,跟列表一樣,列出符合條件的員工資料,程式碼如下:
<h3>員工銷售排行榜</h3>
<div class="grid grid-pad">
<a *ngFor="let employeeinfo of employeelists" class="col-1-4">
<div class="module hero">
<h4>{{employeeinfo.name}}</h4>
<h4>{{employeeinfo.sales}}</h4>
</div>
</a>
</div>
在employee-sales-list.component.css中,也要設定css,來讓html顯示的,比較好顯示出來。
[class*='col-'] {
float: left;
padding-right: 20px;
padding-bottom: 20px;
}
[class*='col-']:last-of-type {
padding-right: 0;
}
a {
text-decoration: none;
}
*, *:after, *:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
h3 {
text-align: center;
margin-bottom: 0;
}
h4 {
position: relative;
}
.grid {
margin: 0;
}
.col-1-4 {
width: 25%;
}
.module {
padding: 20px;
text-align: center;
color: #eee;
max-height: 120px;
min-width: 120px;
background-color: #3f525c;
border-radius: 2px;
}
.module:hover {
background-color: #eee;
cursor: pointer;
color: #607d8b;
}
.grid-pad {
padding: 10px 0;
}
.grid-pad > [class*='col-']:last-of-type {
padding-right: 20px;
}
@media (max-width: 600px) {
.module {
font-size: 10px;
max-height: 75px; }
}
@media (max-width: 1024px) {
.grid {
margin: 0;
}
.module {
min-width: 60px;
}
}
最後,在app.component.html網頁,要將原來顯示的區塊,更新成員工銷售排行榜即可。
<app-employee-sales-list></app-employee-sales-list>
<router-outlet></router-outlet>
網頁執行結果 ,不過,選取員工是沒有反應的。因為,後續,要配合Routing路由來組成切換網頁,及連結到明細資料: